home *** CD-ROM | disk | FTP | other *** search
/ CD Actual Thematic 7: Programming / CDAT7.iso / Share / Codigo / hh / rsource.exe / Hexen Source / ST_START.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-22  |  8.4 KB  |  348 lines

  1.  
  2. //**************************************************************************
  3. //**
  4. //** st_start.c : Heretic 2 : Raven Software, Corp.
  5. //**
  6. //** $RCSfile: st_start.c,v $
  7. //** $Revision: 1.21 $
  8. //** $Date: 95/12/21 15:03:51 $
  9. //** $Author: bgokey $
  10. //**
  11. //**************************************************************************
  12.  
  13.  
  14. // HEADER FILES ------------------------------------------------------------
  15. #ifdef __WATCOMC__
  16.     #include <sys\stat.h>
  17.     #include <sys\types.h>
  18.     #include <io.h>
  19. #else
  20.     #include <libc.h>
  21.     #include <ctype.h>
  22.     #define O_BINARY 0
  23. #endif
  24. #include "h2def.h"
  25. #include <fcntl.h>
  26. #include <stdarg.h>                // Needed for next as well as dos
  27. #include "st_start.h"
  28.  
  29.  
  30. // MACROS ------------------------------------------------------------------
  31. #define ST_MAX_NOTCHES        32
  32. #define ST_NOTCH_WIDTH        16
  33. #define ST_NOTCH_HEIGHT        23
  34. #define ST_PROGRESS_X        64            // Start of notches x screen pos.
  35. #define ST_PROGRESS_Y        441            // Start of notches y screen pos.
  36.  
  37. #define ST_NETPROGRESS_X        288
  38. #define ST_NETPROGRESS_Y        32
  39. #define ST_NETNOTCH_WIDTH        8
  40. #define ST_NETNOTCH_HEIGHT        16
  41. #define ST_MAX_NETNOTCHES        8
  42.  
  43. // TYPES -------------------------------------------------------------------
  44.  
  45. // EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
  46. extern void SetVideoModeHR(void);
  47. extern void ClearScreenHR(void);
  48. extern void SlamHR(char *buffer);
  49. extern void SlamBlockHR(int x, int y, int w, int h, char *src);
  50. extern void InitPaletteHR(void);
  51. extern void SetPaletteHR(byte *palette);
  52. extern void GetPaletteHR(byte *palette);
  53. extern void FadeToPaletteHR(byte *palette);
  54. extern void FadeToBlackHR(void);
  55. extern void BlackPaletteHR(void);
  56. extern void I_StartupReadKeys(void);
  57.  
  58. // PUBLIC FUNCTION PROTOTYPES ----------------------------------------------
  59.  
  60. // PRIVATE FUNCTION PROTOTYPES ---------------------------------------------
  61. char *ST_LoadScreen(void);
  62. void ST_UpdateNotches(int notchPosition);
  63. void ST_UpdateNetNotches(int notchPosition);
  64.  
  65. // EXTERNAL DATA DECLARATIONS ----------------------------------------------
  66.  
  67. // PUBLIC DATA DEFINITIONS -------------------------------------------------
  68.  
  69. // PRIVATE DATA DEFINITIONS ------------------------------------------------
  70. char *bitmap = NULL;
  71.  
  72. char notchTable[]=
  73. {
  74.     // plane 0
  75.     0x00, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40,
  76.     0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x03, 0xC0,
  77.     0x0F, 0x90, 0x1B, 0x68, 0x3D, 0xBC, 0x3F, 0xFC, 0x20, 0x08, 0x20, 0x08,
  78.     0x2F, 0xD8, 0x37, 0xD8, 0x37, 0xF8, 0x1F, 0xF8, 0x1C, 0x50,
  79.  
  80.     // plane 1
  81.     0x00, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x02, 0x40,
  82.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x01, 0xA0,
  83.     0x30, 0x6C, 0x24, 0x94, 0x42, 0x4A, 0x60, 0x0E, 0x60, 0x06, 0x7F, 0xF6,
  84.     0x7F, 0xF6, 0x7F, 0xF6, 0x5E, 0xF6, 0x38, 0x16, 0x23, 0xAC,
  85.  
  86.     // plane 2
  87.     0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x02, 0x40, 0x02, 0x40,
  88.     0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x03, 0xE0,
  89.     0x30, 0x6C, 0x24, 0x94, 0x52, 0x6A, 0x7F, 0xFE, 0x60, 0x0E, 0x60, 0x0E,
  90.     0x6F, 0xD6, 0x77, 0xD6, 0x56, 0xF6, 0x38, 0x36, 0x23, 0xAC,
  91.  
  92.     // plane 3
  93.     0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80,
  94.     0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0x80, 0x02, 0x40,
  95.     0x0F, 0x90, 0x1B, 0x68, 0x3D, 0xB4, 0x1F, 0xF0, 0x1F, 0xF8, 0x1F, 0xF8,
  96.     0x10, 0x28, 0x08, 0x28, 0x29, 0x08, 0x07, 0xE8, 0x1C, 0x50
  97. };
  98.  
  99.  
  100. // Red Network Progress notches
  101. char netnotchTable[]=
  102. {
  103.     // plane 0
  104.     0x80, 0x50, 0xD0, 0xf0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xD0, 0xF0, 0xC0,
  105.     0x70, 0x50, 0x80, 0x60,
  106.  
  107.     // plane 1
  108.     0x60, 0xE0, 0xE0, 0xA0, 0xA0, 0xA0, 0xE0, 0xA0, 0xA0, 0xA0, 0xE0, 0xA0,
  109.     0xA0, 0xE0, 0x60, 0x00,
  110.  
  111.     // plane 2
  112.     0x80, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00,
  113.     0x10, 0x10, 0x80, 0x60,
  114.  
  115.     // plane 3
  116.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  117.     0x00, 0x00, 0x00, 0x00
  118. };
  119.  
  120. // CODE --------------------------------------------------------------------
  121.  
  122.  
  123.  
  124. //--------------------------------------------------------------------------
  125. //
  126. // Startup Screen Functions
  127. //
  128. //--------------------------------------------------------------------------
  129.  
  130.  
  131. //==========================================================================
  132. //
  133. // ST_Init - Do the startup screen
  134. //
  135. //==========================================================================
  136.  
  137. void ST_Init(void)
  138. {
  139. #ifdef __WATCOMC__
  140.     char *pal;
  141.     char *buffer;
  142.  
  143.     if (!debugmode)
  144.     {
  145.         // Set 640x480x16 mode
  146.         SetVideoModeHR();
  147.         ClearScreenHR();
  148.         InitPaletteHR();
  149.         BlackPaletteHR();
  150.  
  151.         // Load graphic
  152.         buffer = ST_LoadScreen();
  153.         pal = buffer;
  154.         bitmap = buffer + 16*3;
  155.  
  156.         SlamHR(bitmap);
  157.         FadeToPaletteHR(pal);
  158.         Z_Free(buffer);
  159.     }
  160. #endif
  161. }
  162.  
  163.  
  164. void ST_Done(void)
  165. {
  166. #ifdef __WATCOMC__
  167.     ClearScreenHR();
  168. #endif
  169. }
  170.  
  171.  
  172. //==========================================================================
  173. //
  174. // ST_UpdateNotches
  175. //
  176. //==========================================================================
  177.  
  178. void ST_UpdateNotches(int notchPosition)
  179. {
  180. #ifdef __WATCOMC__
  181.     int x = ST_PROGRESS_X + notchPosition*ST_NOTCH_WIDTH;
  182.     int y = ST_PROGRESS_Y;
  183.     SlamBlockHR(x,y, ST_NOTCH_WIDTH,ST_NOTCH_HEIGHT, notchTable);
  184. #endif
  185. }
  186.  
  187.  
  188. //==========================================================================
  189. //
  190. // ST_UpdateNetNotches - indicates network progress
  191. //
  192. //==========================================================================
  193.  
  194. void ST_UpdateNetNotches(int notchPosition)
  195. {
  196. #ifdef __WATCOMC__
  197.     int x = ST_NETPROGRESS_X + notchPosition*ST_NETNOTCH_WIDTH;
  198.     int y = ST_NETPROGRESS_Y;
  199.     SlamBlockHR(x,y, ST_NETNOTCH_WIDTH, ST_NETNOTCH_HEIGHT, netnotchTable);
  200. #endif
  201. }
  202.  
  203.  
  204. //==========================================================================
  205. //
  206. // ST_Progress - increments progress indicator
  207. //
  208. //==========================================================================
  209.  
  210. void ST_Progress(void)
  211. {
  212. #ifdef __WATCOMC__
  213.     static int notchPosition=0;
  214.  
  215.     // Check for ESC press -- during startup all events eaten here
  216.     I_StartupReadKeys();
  217.  
  218.     if (debugmode)
  219.     {
  220.         printf(".");
  221.     }
  222.     else
  223.     {
  224.         if(notchPosition<ST_MAX_NOTCHES)
  225.         {
  226.             ST_UpdateNotches(notchPosition);
  227.             S_StartSound(NULL, SFX_STARTUP_TICK);
  228.             notchPosition++;
  229.         }
  230.     }
  231. #else
  232.     printf(".");
  233. #endif
  234. }
  235.  
  236.  
  237. //==========================================================================
  238. //
  239. // ST_NetProgress - indicates network progress
  240. //
  241. //==========================================================================
  242.  
  243. void ST_NetProgress(void)
  244. {
  245. #ifdef __WATCOMC__
  246.     static int netnotchPosition=0;
  247.     if (debugmode)
  248.     {
  249.         printf("*");
  250.     }
  251.     else
  252.     {
  253.         if(netnotchPosition<ST_MAX_NETNOTCHES)
  254.         {
  255.             ST_UpdateNetNotches(netnotchPosition);
  256.             S_StartSound(NULL, SFX_DRIP);
  257.             netnotchPosition++;
  258.         }
  259.     }
  260. #endif
  261. }
  262.  
  263.  
  264. //==========================================================================
  265. //
  266. // ST_NetDone - net progress complete
  267. //
  268. //==========================================================================
  269. void ST_NetDone(void)
  270. {
  271.     S_StartSound(NULL, SFX_PICKUP_WEAPON);
  272. }
  273.  
  274.  
  275. //==========================================================================
  276. //
  277. // ST_Message - gives debug message
  278. //
  279. //==========================================================================
  280.  
  281. void ST_Message(char *message, ...)
  282. {
  283.     va_list argptr;
  284.     char buffer[80];
  285.  
  286.     va_start(argptr, message);
  287.     vsprintf(buffer, message, argptr);
  288.     va_end(argptr);
  289.  
  290.     if ( strlen(buffer) >= 80 )
  291.     {
  292.         I_Error("Long debug message has overwritten memory");
  293.     }
  294.  
  295. #ifdef __WATCOMC__
  296.     if (debugmode)
  297.     {
  298.         printf(buffer);
  299.     }
  300. #else
  301.     printf(buffer);
  302. #endif
  303. }
  304.  
  305. //==========================================================================
  306. //
  307. // ST_RealMessage - gives user message
  308. //
  309. //==========================================================================
  310.  
  311. void ST_RealMessage(char *message, ...)
  312. {
  313.     va_list argptr;
  314.     char buffer[80];
  315.  
  316.     va_start(argptr, message);
  317.     vsprintf(buffer, message, argptr);
  318.     va_end(argptr);
  319.  
  320.     if ( strlen(buffer) >= 80 )
  321.     {
  322.         I_Error("Long debug message has overwritten memory\n");
  323.     }
  324.  
  325.     printf(buffer);        // Always print these messages
  326. }
  327.  
  328.  
  329.  
  330. //==========================================================================
  331. //
  332. // ST_LoadScreen - loads startup graphic
  333. //
  334. //==========================================================================
  335.  
  336.  
  337. char *ST_LoadScreen(void)
  338. {
  339.     int length,lump;
  340.     char *buffer;
  341.  
  342.     lump = W_GetNumForName("STARTUP");
  343.     length = W_LumpLength(lump);
  344.     buffer = (char *)Z_Malloc(length, PU_STATIC, NULL);
  345.     W_ReadLump(lump, buffer);
  346.     return(buffer);
  347. }
  348.